# 词频是某个词在文章中出现的频率


# 需求：统计文章中出现次数前20%关键词的词频
import jieba
from collections import  Counter

# 步骤
# 1. 读取文章

def open_file(filepath):
    with open(filepath, 'r', encoding='utf-8') as f:
        path = f.read()
        return  path

txt = open_file(r'news.txt')

# 2. jieba分词
words = jieba.cut(txt)

# 创建一个自己的停用词列表
spam_word = ['都', '在', '会', '让', '也', '就',
             '有', '要', '“', '”', '了', '是', '对', '我们', '？', '，', '。', ' ', '\t', '\n', '']

# 网上整理好的中文停用词列表
with open(r'cn_stopwords.txt', 'r', encoding='utf-8') as f:
    spams = f.read()
    spam = spams.split('\n')

# 将关键词都添加到一个列表
lists = [word for word in words if word not in spam_word and word not in spam and len(word)>1]

# 统计每个词出现的次数 Counter方法
res = Counter(lists)
print(type(res))

# 3. 排序 sorted方法
res_sort = sorted(res.items(), key=lambda x:x[1], reverse=True)
print(type(res_sort))

# 4. 计算前20%词的词频
keys_len = int(len(res_sort) * 0.2)
top = res_sort[:keys_len]
# print(top)
# 公式：词频 = 某个词出现的次数 / 文章总词数
for i in top:
    key_num = i[1] / len(lists)
    print(f"{i[0]} 出现了{i[1]}次，词频是{key_num}")

